![【Amazon Polly】 Twilio さんに Mizuki さんの声で話してもらいました!](https://devio2023-media.developers.io/wp-content/uploads/2013/10/twilio.png)
【Amazon Polly】 Twilio さんに Mizuki さんの声で話してもらいました!
今月( 8月)の 6日に発表があったのですが、Twilio の音声合成エンジンとして Amazon Polly が使えるようになっています!
- Twilio が、Amazon Polly との統合で、幅広い音声選択を顧客に提供 | Amazon Web Services ブログ 【原文(英語)】
- Twilio に 新しい音声合成エンジンボイスを追加!- Amazon Polly 50種類 | Twilio for KDDI Web Communications
いま動いている Twilio アプリケーションで Mizuki さんがしゃべってくれるというわけで、さっそく試してみました。
Twilio 経由で Mizuki さんの声を電話越しに聞くだけであれば、無料トライアル枠でも利用可能です。弊ブログには下記のような記事もありますので、興味があれば試してみて下さい。
前提
Twilio の REST API を叩いて電話をかける場合、 TwiML と呼ばれる XML 形式のファイルを Twilio に渡さないとなりません。この XML は Twilio側から GET
(あるいは POST
)させる必要があるので、通常は何かしらの Web サーバなりを用意するのですけど、今回は試験なので Twilio Labs の Twimlet (echo) を使います。
以下、パラメータとしては下記を前提とします。適宜、ご自身の環境のものと読み替えてください。
項目 | 値 | 備考 |
---|---|---|
Twilioの電話番号 (From) | +8150xxxxxxxx | 050-xxxx-xxxx |
架電先電話番号 (To) | +8190yyyyyyyy | 090-yyyy-yyyy |
アカウント SID | ACxxxx1234xxxxEXAMPLExxxx1234xxxx1 | |
認証トークン | nnnn5678nnnn5678nnnn5678nnnn5678 |
まずは標準の声(Basic Voice)を聞く
まずは従来の音声の場合です。とりあえず女性の声に設定してみました。文面は上述の URL 先にある Amazon Polly の例文にしています。
<?xml version="1.0" encoding="UTF-8"?> <Response> <Say language="ja-jp" voice="woman"> こんにちは、外国語を話せますか? 世界にはたくさんの言語があります。womanでした。 </Say> </Response>
この XML(TwiML)を、Twimlet echo を使って使えるように変換します。
上述した echo の URL にある TwiML: のフォームに上記の XML を貼り付けると、そのしたの Resulting URL にエンコードされた文字列が出力されます。
http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22woman%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82woman%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&
こちらを Twilio に送りつけるかたちになります。curl
を使って、ターミナルに貼り付けて使えるようなスクリプトで書いてみました。
( TWILIO_FROM="+8150xxxxxxxx" TWILIO_TO="+8190yyyyyyyy" ACCOUNT_SID="ACxxxx1234xxxxEXAMPLExxxx1234xxxx1" # アカウント SID AUTH_TOKEN="nnnn5678nnnn5678nnnn5678nnnn5678" # 認証トークン # Twimlit echo を使って生成した URL ECHO_URL='http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22woman%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82woman%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&' curl -X POST https://api.twilio.com/2010-04-01/Accounts/${ACCOUNT_SID}/Calls.json \ --data-urlencode "From=${TWILIO_FROM}" \ --data-urlencode "To=${TWILIO_TO}" \ --data-urlencode "Url=${ECHO_URL}" \ -u ${ACCOUNT_SID}:${AUTH_TOKEN} )
ECHO_URL のところが見難くて恐縮ですが、(
から)
までを選択してターミナルにコピペしエンターキーを叩いてください。 TWILIO_TO
に指定した電話番号に電話がかかってくるかと思います。
電話に出たら、(個人的には)聞き慣れた Twilio の定番の声色でメッセージを聞くことができます。
ちなみにこちらのコードは、下記ドキュメントを参考にしました。
Mizuki さんに代わってもらう
では交代してもらいましょう。voice
の指定を Polly.Mizuki
に変更するだけです。
<?xml version="1.0" encoding="UTF-8"?> <Response> <Say language="ja-jp" voice="Polly.Mizuki"> こんにちは、外国語を話せますか? 世界にはたくさんの言語があります。Polly.Mizukiでした。 </Say> </Response>
Twimlet echo によって変換された URL がこちらになるので、
http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22Polly.Mizuki%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82Polly.Mizuki%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&
スクリプトはこうですね。変更点は ECHO_URL
のところだけです。
( TWILIO_FROM="+8150xxxxxxxx" TWILIO_TO="+8190yyyyyyyy" ACCOUNT_SID="ACxxxx1234xxxxEXAMPLExxxx1234xxxx1" # アカウント SID AUTH_TOKEN="nnnn5678nnnn5678nnnn5678nnnn5678" # 認証トークン # Twimlit echo を使って生成した URL ECHO_URL='http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22Polly.Mizuki%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82Polly.Mizuki%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&' curl -X POST https://api.twilio.com/2010-04-01/Accounts/${ACCOUNT_SID}/Calls.json \ --data-urlencode "From=${TWILIO_FROM}" \ --data-urlencode "To=${TWILIO_TO}" \ --data-urlencode "Url=${ECHO_URL}" \ -u ${ACCOUNT_SID}:${AUTH_TOKEN} )
先ほどと同じように Twilio の API を叩いてみて下さい。Mizuki さんの声が聞こえてきたでしょうか。
男性の声がいい! という話であれば、voice
の指定を Polly.Takumi
にすると Takumi さんの声になります。
簡単ですね!
もちろん言語を変更すれば、Polly の他のボイスを使うことも可能です。上述した こちらの記事 を参考にしてみて下さい。
その他
コストですが、Amazon Polly の利用料金は Twilio のコストに上乗せになります。とはいえ、上述した URL からすると、非常にリーズナブルといってよい金額かと思います。
<Say>のAmazon Pollyは、100文字ごとに 0.12円で利用できます。自動ボリュームディスカウントも適用されます。
またブログによると、今後 SSML (Speech Synthesis Markup Language) にも対応していくとのことです。
まとめ
大規模な改修を伴うことなく、Twilio に渡す XML を書き換えるだけで、声色を Mizuki さんに変更することが出来ました。Basic Voice もよいですが、もし変化が欲しいということでしたら、新しい Polly の音声も検討してみて下さい。